home *** CD-ROM | disk | FTP | other *** search
/ Delphi 5 for Professionals / DELPHI5.iso / AddOns / Components / TEECHART / Src Code / IMAPOINT.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-10-24  |  7.4 KB  |  238 lines

  1. {**********************************************}
  2. {   TImagePointSeries and TDeltaPointSeries    }
  3. {   Copyright (c) 1997-98 by David Berneda     }
  4. {      Series Developer Kit Example            }
  5. {**********************************************}
  6. {$I teedefs.inc}
  7. unit ImaPoint;
  8.  
  9. interface
  10.  
  11. Uses WinTypes,WinProcs,SysUtils,Classes,Graphics,Teengine,Chart,Series,TeCanvas;
  12.  
  13. {  This unit contains two sample Series components:
  14.  
  15.    TImagePointSeries --  A point Series displaying images
  16.    TDeltaPointSeries --  An ImagePoint Series displaying a different
  17.                          image depending the previous point value.
  18. }
  19.  
  20. Type { ImagePoint Series definition.... }
  21.      TCustomImagePointSeries=class;
  22.      TGetImageEvent=Procedure( Sender:TCustomImagePointSeries;
  23.                                ValueIndex:Integer;
  24.                                Picture:TPicture) of object;
  25.  
  26.      TCustomImagePointSeries=class(TPointSeries)
  27.      private
  28.        FImagePoint:TPicture;
  29.        FOnGetImage:TGetImageEvent;
  30.        procedure SetImagePoint(Value:TPicture);
  31.      protected
  32.        procedure DrawValue(ValueIndex:Longint); override;
  33.      public
  34.        Constructor Create(AOwner:TComponent); override;
  35.        Destructor Destroy; override;
  36.        Procedure PrepareForGallery(IsEnabled:Boolean); override;
  37.        property ImagePoint:TPicture read FImagePoint write SetImagePoint;
  38.        property OnGetImage:TGetImageEvent read FOnGetImage
  39.                                           write FOnGetImage;
  40.      end;
  41.  
  42.      TImagePointSeries=class(TCustomImagePointSeries)
  43.      published
  44.        property ImagePoint;
  45.        property OnGetImage;
  46.      end;
  47.  
  48.      TDeltaImageStyle=(disSmiles, disHands);
  49.  
  50.      { DeltaPoint Series definition.... }
  51.      TDeltaPointSeries=class(TCustomImagePointSeries)
  52.      private
  53.        FEqualImage,
  54.        FGreaterImage,
  55.        FLowerImage   : TPicture;
  56.        FImageStyle : TDeltaImageStyle;
  57.        procedure SetEqualImage(Value:TPicture);
  58.        procedure SetGreaterImage(Value:TPicture);
  59.        procedure SetLowerImage(Value:TPicture);
  60.        procedure SetImageStyle(Value:TDeltaImageStyle);
  61.      public
  62.        Constructor Create(AOwner:TComponent); override;
  63.        Destructor Destroy; override;
  64.      protected
  65.        procedure DrawValue(ValueIndex:Longint); override;
  66.      published
  67.        property ImageStyle:TDeltaImageStyle read FImageStyle write
  68.                                             SetImageStyle default disSmiles;
  69.        property EqualImage:TPicture read FEqualImage write SetEqualImage;
  70.        property GreaterImage:TPicture read FGreaterImage write SetGreaterImage;
  71.        property LowerImage:TPicture read FLowerImage write SetLowerImage;
  72.        { inherited from TCustomImagePointSeries }
  73.        property OnGetImage;
  74.      end;
  75.  
  76. implementation
  77.  
  78. Uses ImageBar,TeeProco;  { <-- needed only for the "Samples" constant }
  79.  
  80. {$IFDEF D1}
  81. {$R TEEIMAPO.R16}
  82. {$ELSE}
  83. {$R TEEIMAPO.RES}
  84. {$ENDIF}
  85.  
  86. { overrided constructor to create the ImagePoint property }
  87. Constructor TCustomImagePointSeries.Create(AOwner:TComponent);
  88. begin
  89.   inherited Create(AOwner);
  90.   FImagePoint:=TPicture.Create;
  91.   FImagePoint.OnChange:=CanvasChanged;
  92.   LoadBitmapFromResourceName(FImagePoint.Bitmap,'TeeDefaultImage');
  93.   Pointer.ChangeHorizSize(FImagePoint.Width);
  94.   Pointer.ChangeVertSize(FImagePoint.Height);
  95. end;
  96.  
  97. { overrided DrawValue to draw an Image for each point }
  98. procedure TCustomImagePointSeries.DrawValue(ValueIndex:Longint);
  99. var tmpX : Integer;
  100.     tmpY : Integer;
  101.     tmpW : Integer;
  102.     tmpH : Integer;
  103.     R    : TRect;
  104. begin
  105.   if FImagePoint.Graphic=nil then inherited DrawValue(ValueIndex)
  106.   else
  107.   With ParentChart,Canvas do
  108.   begin
  109.     { trigger the OnGetImage event if assigned... }
  110.     if Assigned(FOnGetImage) then OnGetImage(Self,ValueIndex,FImagePoint);
  111.  
  112.     { draw the image... }
  113.     tmpX:=CalcXPos(ValueIndex);
  114.     tmpY:=CalcYPos(ValueIndex);
  115.  
  116.     tmpW:=Pointer.HorizSize div 2;
  117.     tmpH:=Pointer.VertSize div 2;
  118.  
  119.     R:=Rect( tmpX-tmpW,tmpY-tmpH,tmpX+tmpW,tmpY+tmpH );
  120.     With ParentChart.Canvas,R do
  121.     begin
  122.       TopLeft    :=Calculate3DPosition(Left,Top,StartZ);
  123.       BottomRight:=Calculate3DPosition(Right,Bottom,StartZ);
  124.       StretchDraw(R,FImagePoint.Graphic);
  125.     end;
  126.   end;
  127. end;
  128.  
  129. procedure TCustomImagePointSeries.SetImagePoint(Value:TPicture);
  130. begin
  131.   FImagePoint.Assign(Value);   { <-- set new property values }
  132.   if Value<>nil then
  133.   begin
  134.     if Value.Width>0 then Pointer.HorizSize:=Value.Width;
  135.     if Value.Height>0 then Pointer.VertSize:=Value.Height;
  136.   end;
  137. end;
  138.  
  139. Destructor TCustomImagePointSeries.Destroy;
  140. begin
  141.   FImagePoint.Free;  { <-- remember to destroy private properties }
  142.   inherited Destroy;
  143. end;
  144.  
  145. Procedure TCustomImagePointSeries.PrepareForGallery(IsEnabled:Boolean);
  146. begin
  147.   inherited PrepareForGallery(IsEnabled);
  148.   ParentChart.View3DOptions.Orthogonal:=True;
  149. end;
  150.  
  151. { TDeltaPointSeries }
  152. Constructor TDeltaPointSeries.Create(AOwner:TComponent);
  153. begin
  154.   inherited Create(AOwner);
  155.   FEqualImage:=TPicture.Create;
  156.   FEqualImage.OnChange:=CanvasChanged;
  157.   FGreaterImage:=TPicture.Create;
  158.   FGreaterImage.OnChange:=CanvasChanged;
  159.   FLowerImage:=TPicture.Create;
  160.   FLowerImage.OnChange:=CanvasChanged;
  161.   ImageStyle:=disSmiles;
  162. end;
  163.  
  164. Destructor TDeltaPointSeries.Destroy;
  165. begin
  166.   FEqualImage.Free;
  167.   FLowerImage.Free;
  168.   FGreaterImage.Free;
  169.   inherited Destroy;
  170. end;
  171.  
  172. { overrided DrawValue to draw an Image for each point }
  173. procedure TDeltaPointSeries.DrawValue(ValueIndex:Longint);
  174. Var tmp,tmpPrevious:Double;
  175. begin
  176.   if ValueIndex=0 then FImagePoint.Assign(FEqualImage)
  177.   else
  178.   begin
  179.     tmpPrevious:=MandatoryValueList[ValueIndex-1];
  180.     tmp:=MandatoryValueList[ValueIndex];
  181.     if tmp>tmpPrevious then FImagePoint.Assign(FGreaterImage) else
  182.     if tmp<tmpPrevious then FImagePoint.Assign(FLowerImage) else
  183.                             FImagePoint.Assign(FEqualImage);
  184.   end;
  185.   if FImagePoint.Width>0 then Pointer.ChangeHorizSize(FImagePoint.Width);
  186.   if FImagePoint.Height>0 then Pointer.ChangeVertSize(FImagePoint.Height);
  187.   inherited DrawValue(ValueIndex);
  188. end;
  189.  
  190. procedure TDeltaPointSeries.SetEqualImage(Value:TPicture);
  191. begin
  192.   FEqualImage.Assign(Value);
  193. end;
  194.  
  195. procedure TDeltaPointSeries.SetGreaterImage(Value:TPicture);
  196. begin
  197.   FGreaterImage.Assign(Value);
  198. end;
  199.  
  200. procedure TDeltaPointSeries.SetLowerImage(Value:TPicture);
  201. begin
  202.   FLowerImage.Assign(Value);
  203. end;
  204.  
  205. procedure TDeltaPointSeries.SetImageStyle(Value:TDeltaImageStyle);
  206. begin
  207.   FImageStyle:=Value;
  208.   if Value=disSmiles then
  209.   begin
  210.     LoadBitmapFromResourceName(FEqualImage.Bitmap,  'TeeEqualSmile');
  211.     LoadBitmapFromResourceName(FGreaterImage.Bitmap,'TeeGreaterSmile');
  212.     LoadBitmapFromResourceName(FLowerImage.Bitmap,  'TeeLowerSmile');
  213.   end
  214.   else
  215.   begin
  216.     LoadBitmapFromResourceName(FEqualImage.Bitmap,  'TeeEqualHand');
  217.     LoadBitmapFromResourceName(FGreaterImage.Bitmap,'TeeGreaterHand');
  218.     LoadBitmapFromResourceName(FLowerImage.Bitmap,  'TeeLowerHand');
  219.   end;
  220. end;
  221.  
  222. { Series/Functions Registration/Un-Registration }
  223. Procedure ImagePointExitProc; far;
  224. begin
  225.   UnRegisterTeeSeries([ TImagePointSeries,TDeltaPointSeries ]);
  226. end;
  227.  
  228. initialization
  229.   RegisterTeeSeries( TImagePointSeries, 'ImagePoint', TeeMsg_GallerySamples, 1 );
  230.   RegisterTeeSeries( TDeltaPointSeries, 'DeltaPoint', TeeMsg_GallerySamples, 1 );
  231. {$IFDEF D1}
  232.   AddExitProc(ImagePointExitProc);
  233. {$ELSE}
  234. finalization
  235.   ImagePointExitProc;
  236. {$ENDIF}
  237. end.
  238.